/**
 * author：这里好象没有人
 * blog：http://inlinux.duapp.com
 * e-mail:myopen@yeah.net
 * note：本程序用于遍历指定文件夹下的所有目录和文件，并用美观的方式打印出来
 */
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
void printdir(char *dir,int depth){//遍历输出目录的函数
	DIR *dp;
	struct dirent *entry;//保存目录项的内容
	struct stat statbuf;//保存文件或目录的相关信息
	if((dp=opendir(dir))==NULL){
		fprintf(stderr,"cna not open directory:%s\n",dir);
		return;
	}
	chdir(dir);//改变当前目录
	while((entry=readdir(dp))!=NULL){//循环扫描目录
		lstat(entry->d_name,&statbuf);
		if(S_ISDIR(statbuf.st_mode)){//是目录时
			if(strcmp(".",entry->d_name)==0 ||
				strcmp("..",entry->d_name)==0){continue;}
			printf("%*s%s/\n",depth,"",entry->d_name);
			printdir(entry->d_name,depth+4);
		}else{//不是目录时
			printf("%*s%s\n",depth+1,"├ ",entry->d_name);
		}
	}
	chdir("..");//循环完成，回到上层目录
	closedir(dp);//关闭目录流
}
int main(int argc,char *argv[]){
	char *topdir = ".";
	if(argc >= 2){
		topdir=argv[1];
	}
	printf("Directory scan of %s:\n",topdir);
	printdir(topdir,0);
	printf("OK! end of scan\n");
	exit (0);
}
